var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var ejs = require('ejs');

var index = require('./routes/index');
var users = require('./routes/users');
var goods = require('./routes/goods');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));

app.engine('.html',ejs.__express);

app.set('view engine', 'html');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 设置全局拦截
app.use((req, res, next) => {
    if(req.cookies.userId){
        // userId 存在，也就是登录了，那就不拦截继续执行
        next();
    }else{
        /**
        * userId 不存在，也就是没有登录了
        * 这个时候 让不登录的接口 能继续调用，其他的一切接口全部禁用，这样就实现了，没有登录什么都调用不了
        * req.originalUrl 当前接口地址
        * goods 作介绍，查询商品的时候，后边会与很多的参数，第几页多少数据排序等等这个时候，req.originalUrl 就不行了，这个获取不到后边的参数
        * 有两种方法
        * 1、req.originalUrl.indexOf('/goods') > -1
        * 2、获取不带参数的 url 地址 req.path 
        */ 
        // if(req.originalUrl == '/users/login' || req.originalUrl == '/users/loginOut' || req.originalUrl.indexOf('/goods/list') > -1 ){
        if(req.originalUrl == '/users/login' || req.originalUrl == '/users/loginOut' || req.path == '/goods/list' ){
            next();
        }else{
            res.json({
                status: '101',
                msg: "当前未登录",
                result:''
            });
        }
    }
});


// 路由地址
app.use('/', index);
app.use('/users', users);

// 新增路由商品，这个文件中的都是一级路由,这个路由到router下边的good,然后router那个good二级路由到 model 下边的goods
app.use('/goods', goods);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
